/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.Ufes.exeSwing.Presenter;

import edu.Ufes.exeSwing.Collection.AgenciaCollection;
import edu.Ufes.exeSwing.Collection.GerenteCollection;
import edu.Ufes.exeSwing.Model.Agencia;
import edu.Ufes.exeSwing.Model.Gerente;
import edu.Ufes.exeSwing.Persistence.AgenciaPersistence;
import edu.Ufes.exeSwing.Persistence.GerentePersistence;
import edu.Ufes.exeSwing.View.InclusaoAgenciaView;
import edu.Ufes.exeSwing.View.InclusaoGerenteView;
import edu.Ufes.exeSwing.View.ListaGerentesView;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.TreeSet;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author bhetynnacatalunha
 */
public class GerentePresenter {

    InclusaoGerenteView inclusaoGerenteView;
    GerenteCollection gerentes;
    ListaGerentesView listagerentesView;
    DefaultTableModel tm;

    public GerentePresenter() {
        inclusaoGerenteView = new InclusaoGerenteView();
        gerentes = new GerenteCollection(new GerentePersistence());
        listagerentesView = new ListaGerentesView();

        inclusaoGerenteView.getBtnCancelar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                inclusaoGerenteView.dispose();
            }
        });

        inclusaoGerenteView.getBtnSalvar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                salvar();
            }
        });

        inclusaoGerenteView.getBtnCancelar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                inclusaoGerenteView.dispose();
            }
        });

        listagerentesView.getBtnNova().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                inclusaoGerenteView.getTxtCPF().setEnabled(true);
                inclusaoGerenteView.getTxtCPF().setText("");
                inclusaoGerenteView.getTxtNome().setText("");
                inclusaoGerenteView.getTxtDataNascimento().setText("");
                inclusaoGerenteView.getTxtEndereco().setText("");
                inclusaoGerenteView.getTxtNomeUsuario().setText("");
                inclusaoGerenteView.getCbmAgencia1().setSelectedItem("");
                inclusaoGerenteView.getCbmAgencia2().setEditable(false);
                carregaAgencias1();
                inclusaoGerenteView.setVisible(true);
            }
        });

        listagerentesView.getBtnEditar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                editar();
            }
        });

        listagerentesView.getBtnExcluir().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                excluir();
            }
        });

        listagerentesView.getBtnFechar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                listagerentesView.dispose();
            }
        });

        listagerentesView.getBtnPesquisar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                pesquisar();
            }
        });
        inclusaoGerenteView.getBtnCadastrarAgencia().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                InclusaoAgenciaView inclusaoAgencia = new InclusaoAgenciaView();
                AgenciaPresenter agenciaPresenter = new AgenciaPresenter(inclusaoAgencia);
            }
        });


        carregaGerentes(gerentes.getTodosGerentes());


        listagerentesView.setVisible(true);

    }

    private void pesquisar() {
        tm.setNumRows(0);
        TreeSet<Gerente> gerentes1 = this.gerentes.getTodosGerentes();
        Iterator<Gerente> it = gerentes1.iterator();

        while (it.hasNext()) {
            Gerente a = it.next();
            int fim = listagerentesView.getTxtFiltrar().getText().length();

            String cidade = a.getNome();
            String filtro = listagerentesView.getTxtFiltrar().getText();

            if (cidade.length() < fim) {
                fim = cidade.length();
            }

            if (cidade.substring(0, fim).toUpperCase().equals(filtro.toUpperCase())) {
                String linha = a.toString();
                String valores[] = linha.split("#");
                tm.addRow(valores);

            }


        }
    }

    private void carregaAgencias1() {
        inclusaoGerenteView.getCbmAgencia2().setEnabled(false);
        AgenciaCollection agenciacollection = new AgenciaCollection(new AgenciaPersistence());
        TreeSet<Agencia> pAgencias = agenciacollection.getTodasAgencias();
        Iterator<Agencia> itAgencia = pAgencias.iterator();
        Agencia a;
        inclusaoGerenteView.getCbmAgencia1().addItem("");
        while (itAgencia.hasNext()) {
            a = itAgencia.next();
            inclusaoGerenteView.getCbmAgencia1().addItem(a.getCodigo());
        }

        inclusaoGerenteView.getCbmAgencia1().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                inclusaoGerenteView.getCbmAgencia2().setEnabled(true);
                String codigo = (String) inclusaoGerenteView.getCbmAgencia1().getSelectedItem();
                carregaAgencias2(codigo);
            }
        });
    }

    private void carregaAgencias2(String pCodigo) {
        AgenciaCollection agenciacollection = new AgenciaCollection(new AgenciaPersistence());
        TreeSet<Agencia> pAgencias = agenciacollection.getTodasAgencias();
        Iterator<Agencia> itAgencia = pAgencias.iterator();
        Agencia a;
        inclusaoGerenteView.getCbmAgencia2().removeAllItems();
        inclusaoGerenteView.getCbmAgencia2().addItem("");
        while (itAgencia.hasNext()) {
            a = itAgencia.next();
            if (!(a.getCodigo().equals(pCodigo))) {
                inclusaoGerenteView.getCbmAgencia2().addItem(a.getCodigo());
            }
        }

    }

    private void carregaGerentes(TreeSet gerentes) {
        tm = new DefaultTableModel(new Object[][]{}, new String[]{"Nome", "Nome do Usuario", "CPF", "Endereco", "Data de Nascimento", "Agencia 1", "Agencia 2"}) {
            @Override
            public boolean isCellEditable(int row, int col) {
                return false;
            }
        };
        tm.setNumRows(0);
        Iterator<Gerente> it = gerentes.iterator();
        while (it.hasNext()) {
            Gerente g = it.next();
            String linha = g.toString();
            String valores[] = linha.split("#");
            tm.addRow(valores);
        }
        this.listagerentesView.getTblDGerentes().setModel(tm);
    }

    private void salvar() {
        Gerente gerente = new Gerente(null, null, null, null, null, null, null);
        AgenciaCollection agenciacollection = new AgenciaCollection(new AgenciaPersistence());
        gerente.setCPF(inclusaoGerenteView.getTxtCPF().getText().toString());
        gerente.setEndereco(inclusaoGerenteView.getTxtEndereco().getText().toString());
        gerente.setNome(inclusaoGerenteView.getTxtNome().getText().toString());
        gerente.setDataNascimento(inclusaoGerenteView.getTxtDataNascimento().getText().toString());
        gerente.setNomeUsuario(inclusaoGerenteView.getTxtNomeUsuario().getText().toString());
        gerente.setAg1(agenciacollection.getUmaAgencia((String) inclusaoGerenteView.getCbmAgencia1().getSelectedItem()));
        gerente.setAg2(agenciacollection.getUmaAgencia((String) inclusaoGerenteView.getCbmAgencia2().getSelectedItem()));

        if (gerente.getCPF().isEmpty() || gerente.getNomeUsuario().isEmpty() || gerente.getDataNascimento().isEmpty()
                || gerente.getNome().isEmpty() || gerente.getEndereco().isEmpty() || (gerente.getAg1() == null && gerente.getAg2() == null)) {
            JOptionPane.showMessageDialog(inclusaoGerenteView, "Preencha os campos em Branco");
        } else {
            gerentes.excluirGerente(gerente);
            gerentes.incluirGerente(gerente);
            this.carregaGerentes(gerentes.getTodosGerentes());
            inclusaoGerenteView.dispose();
            JOptionPane.showMessageDialog(listagerentesView, "Gerente Salvo com Sucesso");
        }
    }

    private void editar() {
        if (listagerentesView.getTblDGerentes().getSelectedRow() != -1) {
            Agencia ag1 = null;
            Agencia ag2 = null;
            AgenciaCollection agenciacollection = new AgenciaCollection(new AgenciaPersistence());
            String nome = (String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 0);
            String nomeUsuario = (String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 1);
            String cpf = (String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 2);
            String endereco = (String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 3);
            String dataAniversario = (String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 4);
            if (agenciacollection.getUmaAgencia((String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 5)) != null) {
                ag1 = agenciacollection.getUmaAgencia((String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 5));
            }
            if (agenciacollection.getUmaAgencia((String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 6)) != null) {
                ag2 = agenciacollection.getUmaAgencia((String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 6));
            }
            Gerente gerente = new Gerente(nome, ag1, ag2, cpf, endereco, dataAniversario, nomeUsuario);
            
            inclusaoGerenteView.getTxtCPF().setText(cpf);
            inclusaoGerenteView.getTxtCPF().setEnabled(false);
            inclusaoGerenteView.getTxtDataNascimento().setText(dataAniversario);
            inclusaoGerenteView.getTxtEndereco().setText(endereco);
            inclusaoGerenteView.getTxtNome().setText(nome);
            inclusaoGerenteView.getTxtNomeUsuario().setText(nomeUsuario);
            if (ag1 != null) {
                inclusaoGerenteView.getCbmAgencia1().setSelectedItem(ag1.getCodigo());
            }
            if (ag2 != null) {
                inclusaoGerenteView.getCbmAgencia2().setSelectedItem(ag2.getCodigo());
            }

            inclusaoGerenteView.setVisible(true);
        } else {
            JOptionPane.showMessageDialog(inclusaoGerenteView, "Selecione uma linha");
        }


    }

    private void excluir() {
        if (listagerentesView.getTblDGerentes().getSelectedRow() != -1) {
            Agencia ag1 = null;
            Agencia ag2 = null;
            AgenciaCollection agenciacollection = new AgenciaCollection(new AgenciaPersistence());
            if (JOptionPane.showConfirmDialog(listagerentesView, "Deseja mesmo excluir este Gerente?") == 0) {
                String nome = (String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 0);
                String nomeUsuario = (String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 1);
                String cpf = (String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 2);
                String endereco = (String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 3);
                String dataAniversario = (String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 4);
                if (agenciacollection.getUmaAgencia((String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 5)) != null) {
                    ag1 = agenciacollection.getUmaAgencia((String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 5));
                }
                if (agenciacollection.getUmaAgencia((String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 6)) != null) {
                    ag2 = agenciacollection.getUmaAgencia((String) listagerentesView.getTblDGerentes().getValueAt(listagerentesView.getTblDGerentes().getSelectedRow(), 6));
                }
                Gerente gerente = new Gerente(nome, ag1, ag2, cpf, endereco, dataAniversario, nomeUsuario);
                gerentes.excluirGerente(gerente);
                this.carregaGerentes(gerentes.getTodosGerentes());
                JOptionPane.showMessageDialog(listagerentesView, "Gerente excluido com Sucesso!");
            }
        } else {
            JOptionPane.showMessageDialog(listagerentesView, "Selecione uma linha");
        }
    }
}
